import requests
import json
from flask import current_app

class AIService:
    """AI查询服务 - 集成DeepSeek API"""

    def __init__(self):
        self.api_url = None
        self.api_key = None
        self.model = None

    def _get_config(self):
        """获取配置"""
        if not self.api_url:
            self.api_url = current_app.config.get('DEEPSEEK_API_URL')
        if not self.api_key:
            self.api_key = current_app.config.get('DEEPSEEK_API_KEY')
        if not self.model:
            self.model = current_app.config.get('DEEPSEEK_MODEL', 'DeepSeek-V3')

    def query(self, prompt, context=None):
        """
        执行自然语言查询

        Args:
            prompt: 用户输入的自然语言查询
            context: 可选的上下文数据（目标、项目、人员等）

        Returns:
            dict: AI响应结果
        """
        self._get_config()

        if not self.api_key:
            return {
                'success': False,
                'error': 'API密钥未配置'
            }

        # 构建系统提示
        system_prompt = self._build_system_prompt(context)

        # 构建消息
        messages = [
            {
                "role": "system",
                "content": system_prompt
            },
            {
                "role": "user",
                "content": prompt
            }
        ]

        try:
            response = requests.post(
                self.api_url,
                headers={
                    "Content-Type": "application/json",
                    "Authorization": f"Bearer {self.api_key}"
                },
                json={
                    "model": self.model,
                    "messages": messages,
                    "temperature": 0.7,
                    "max_tokens": 1000
                },
                timeout=30
            )

            if response.status_code == 200:
                result = response.json()
                content = result.get('choices', [{}])[0].get('message', {}).get('content', '')
                return {
                    'success': True,
                    'response': content,
                    'model': self.model
                }
            else:
                return {
                    'success': False,
                    'error': f'API返回状态码 {response.status_code}: {response.text}'
                }

        except requests.exceptions.RequestException as e:
            return {
                'success': False,
                'error': f'连接错误: {str(e)}'
            }

    def _build_system_prompt(self, context):
        """构建系统提示"""
        base_prompt = """你是一个OKR管理系统的智能助手。你可以帮助用户：
1. 查询目标（Objectives）和关键成果（Key Results）的进度
2. 查询项目状态和信息
3. 查询团队成员的工作状态
4. 提供目标完成情况的分析和建议

重要格式要求：
- 使用 ## 作为主标题
- 使用 ### 作为副标题
- 使用 - 或 1. 作为列表项
- 使用 **粗体** 强调重点
- 使用换行和空行保持清晰的层次结构
- **不要使用Markdown表格** (不要使用 | 符号)
- **不要在回答末尾添加JSON数据**
- 所有数据都用列表或段落形式展示

示例格式：
## 主标题

### 副标题
- 项目1: 描述 (进度: XX%)
- 项目2: 描述 (进度: XX%)

请根据提供的上下文数据，用简洁、专业、结构化的语言回答用户的问题。"""

        if context:
            base_prompt += "\n\n当前上下文数据：\n"
            if 'objectives' in context:
                base_prompt += f"\n目标数据：{json.dumps(context['objectives'], ensure_ascii=False, indent=2)}"
            if 'projects' in context:
                base_prompt += f"\n项目数据：{json.dumps(context['projects'], ensure_ascii=False, indent=2)}"
            if 'team_status' in context:
                base_prompt += f"\n团队状态：{json.dumps(context['team_status'], ensure_ascii=False, indent=2)}"

        return base_prompt

    def analyze_progress(self, objectives):
        """
        分析目标进度

        Args:
            objectives: 目标列表

        Returns:
            dict: 分析结果
        """
        prompt = f"""请分析以下目标的完成情况，并提供改进建议：

{json.dumps(objectives, ensure_ascii=False, indent=2)}

请使用以下Markdown格式回答：

## 📊 总体进度评估
[总体情况概述]

## ⚠️ 滞后目标识别
### 目标1
- **进度**: XX%
- **问题**: [具体问题]

### 目标2
- **进度**: XX%
- **问题**: [具体问题]

## 💡 改进建议
1. [建议1]
2. [建议2]
3. [建议3]

## 🚨 风险提示
- [风险1]
- [风险2]"""

        return self.query(prompt)

    def summarize_team_status(self, team_status):
        """
        总结团队状态

        Args:
            team_status: 团队状态数据

        Returns:
            dict: 总结结果
        """
        prompt = f"""请总结团队当前的工作状态：

{json.dumps(team_status, ensure_ascii=False, indent=2)}

请使用以下Markdown格式回答：

## 👥 团队整体状态

### 📍 人员分布
- **在岗**: X人
- **远程**: X人
- **请假**: X人
- **外出**: X人

### 📋 主要工作任务
1. **任务类型1**: [人员] - [任务描述]
2. **任务类型2**: [人员] - [任务描述]

## ⚠️ 需要关注的事项
- [事项1]
- [事项2]"""

        return self.query(prompt)